package com.hkemmm.db;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

import java.sql.SQLException;

//数据库操作类
public class DBProvider {

    /**
     * 数据库查询操作
     * @param sql   查询语句
     * @param rsh   结果集标识类型，根据泛型类型返回不同结果
     * @param params    变长参数，顶替sql语句中占位符
     * @param <T>   返回泛型类型
     * @return  返回指定类型查询结果集
     */
    public <T> T query(String sql, ResultSetHandler<T> rsh,Object... params){
        T t = null;

        //QueryRunner对象进行查询操作，需要提供数据源
        QueryRunner queryRunner = new QueryRunner(DBCPDataSource.getDataSource());

        try {
            //进行查询操作
            //查询语句，返回值类型，变长参数（顶替sql中占位符）
            t = queryRunner.query(sql,rsh,params);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return t;
    }

    /**
     * 修改、删除、增加操作
     * @param sql   sql语句
     * @param params    sql语句中参数
     * @return      运行结果
     */
    public int execute(String sql, Object... params){
        int i = 0;

        // 创建一个QueryRunner对象,对数据库进行操作
        QueryRunner queryRunner = new QueryRunner(DBCPDataSource.getDataSource());

        try {
            //执行sql语句，返回影响行
            i = queryRunner.execute(sql,params);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return i;
    }


}
